package org.soderiakelvy.controller.sujeto;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.model.domain.ContribucionVO;
import org.soderiakelvy.model.domain.SucursalVO;
import org.soderiakelvy.model.domain.SujetoVO;
import org.soderiakelvy.model.service.SucursalServicio;
import org.soderiakelvy.model.service.SujetoServicio;
import org.soderiakelvy.model.service.imp.SucursalServicioImp;
import org.soderiakelvy.model.service.imp.SujetoServicioImpl;

@ManagedBean
@ViewScoped
public class BuscarSucursales implements Serializable {
	private static final long serialVersionUID = -4186070203596054586L;
	private static final int BUSCAR_POR_CODIGO_SUCURSAL = 1;
	private static final int BUSCAR_POR_APELLIDO_NOMBRE = 2;
	
	//--- VO ---
	private SujetoVO sujeto;
	private SucursalVO sucursal;
	private ContribucionVO contribucion;
	private SujetoServicio serviceSujeto;
	private SucursalServicio serviceSucursal;
	
	//--- List ---
	private List<SucursalVO> sucursales;
	
	//--- VARIABLES---
	private int tipoDeBusqueda;
	
	//--- CONSTRUCTOR ---
	public BuscarSucursales(){
		sujeto = new SujetoVO();
		sucursal = new SucursalVO();
		contribucion = new ContribucionVO();
		serviceSujeto = new SujetoServicioImpl();
		serviceSucursal = new SucursalServicioImp();
		tipoDeBusqueda = BUSCAR_POR_CODIGO_SUCURSAL;
	}

	
	// --- METODOS ---
	public void btnBuscarSucursales(int opcionDeBusqueda){
		System.out.println("Tipo de busqueda:" + opcionDeBusqueda);
		switch (opcionDeBusqueda) {
		case BUSCAR_POR_CODIGO_SUCURSAL:
			sucursales = serviceSucursal.getSucursalesFromSujeto(sujeto);
			break;
		
		case BUSCAR_POR_APELLIDO_NOMBRE:
			sucursales = serviceSucursal.getSucursalesBySucursal(getSucursal());
			break;
		}			
		obtenerSujeto();
	}
	

	private void obtenerSujeto(){
		if(sucursales.size()>0){
			sujeto = this.sucursal.getSujeto();
			if(sujeto.getTipoSujeto().equals(Constante.SUJETO_EMPRESA)){
				contribucion  = serviceSujeto.getContribucionBySujeto(sujeto);
				System.out.println("imprimiendo contribucion: "+contribucion.getRazonSocial());
			}
			System.out.println(sujeto.getTipoSujeto());
		}
	}
	
	public String btnMostrarSucursal(SucursalVO sucursalSelected){
		this.sucursal = sucursalSelected;
		System.out.println("Redireccionando sujetoEmpresaEdit.xhtml " + this.sucursal.getNombre() + " " + this.sucursal.getApellido());
		System.out.println("Nombre: "+this.sucursal.getNombre());
		FacesContext fc = FacesContext.getCurrentInstance();
		Map<String,Object> sessionParams = fc.getExternalContext().getSessionMap();
		sessionParams.put("sucursalUpdateCreate", this.sucursal);
		System.out.println();
		return "sujetoEmpresaEdit.xhtml?faces-redirect=true";
	}
	// ---------------


	// --- GET & SET ---
	public SujetoVO getSujeto() {
		return sujeto;
	}

	public SucursalVO getSucursal() {
		return sucursal;
	}

	public ContribucionVO getContribucion(){
		return contribucion;
	}

	public List<SucursalVO> getSucursales() {
		return sucursales;
	}


	public int getTipoDeBusqueda() {
		return tipoDeBusqueda;
	}


	public void setTipoDeBusqueda(int tipoDeBusqueda) {
		this.tipoDeBusqueda = tipoDeBusqueda;
	}
	
	
}